DEFINE OBJECTS 1
DEFINE OBJECT SANNY BUILDER 3.2.2     

DEFINE MISSIONS 0

//-------------MAIN---------------
thread 'MAIN' 
fade 0 0 
set_max_wanted_level_to 0 
set_wb_check_to 0 
set_current_time 12 0 
$PLAYER_CHAR = Player.Create(#NULL, 0.0, 0.0, 10.0)
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR)
set_weather 0 
wait 0 
0180: set_on_mission_flag_to $ONMISSION 
if 
   not Actor.Dead($PLAYER_ACTOR)
else_goto @MAIN_2 
0352: set_actor $PLAYER_ACTOR skin_to 'PLAYER' 
load_requested_models 
0353: refresh_actor $PLAYER_ACTOR 

:MAIN_2
if 
   Player.Defined($PLAYER_CHAR)
else_goto @MAIN_3 
Player.CanMove($PLAYER_CHAR) = False
create_thread @MENU 
 
:MAIN_3 
//(EN)It's important to loop this thread
//(RU)   
wait 100
00C0: set_current_time 12 0
jump @MAIN_3 

:MENU
//(EN)Here's menu script starts
//(RU)   
thread 'MENU' 
select_interior 1
04F9: set_extracolors 3 fade 0
04D8: set_actor $PLAYER_ACTOR drown 0 
01EB: set_traffic_density_multiplier_to 0.0 
set_ped_density 0.0 
03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 1 
01F7: set_player $PLAYER_CHAR ignored_by_cops_state_to 1 
Player.InfiniteRun($PLAYER_CHAR) = True
03AD: set_rubbish 0 
Model.Load(#HRadio)
Model.Load(#HRadio2)
Model.Load(#HRadio3)
Model.Load(#HRTw1)
Model.Load(#HRTw1a)
Model.Load(#HRTw2)
Model.Load(#HRTw3)
Model.Load(#HRInd)
Model.Load(#HTVBr01)
Model.Load(#HTVBr02)
Model.Load(#rcraider)
//(EN)You need to load any vehicle in menu for correct loading new game later
//(RU)            
load_requested_models  

:MENU_2
wait 0 
if and
   Model.Available(#HRadio)
   Model.Available(#HRadio2)
   Model.Available(#HRadio3)
   Model.Available(#HRTw1)
   Model.Available(#HRTw1a)
   Model.Available(#HRTw2)
   Model.Available(#HRTw3)
   Model.Available(#HRInd)
else_goto @MENU_2
if and
   Model.Available(#HTVBr01)
   Model.Available(#HTVBr02)
   Model.Available(#rcraider)
else_goto @MENU_2 
04E4: unknown_refresh_game_renderer_at 229.0 -1265.0 
$RCRaider = Car.Create(#rcraider, 226.5, -1265.1, 19.4)
0175: set_car $RCRaider z_angle_to 330.0
0249: release_model #rcraider
02AC: set_car $RCRaider immunities BP 1 FP 1 EP 1 CP 1 MP 1
set_player_coordinates $PLAYER_CHAR 203.0 -1287.0 14.0 
$HRadio = Object.Create(#HRadio, 228.8, -1261.0, 10.03)
01BC: put_object $HRadio at 228.8 -1261.0 20.03
0177: set_object $HRadio z_angle_to 270.0
$HRadio2 = Object.Create(#HRadio2, 228.8, -1261.0, 10.03)
01BC: put_object $HRadio2 at 228.8 -1261.0 20.03
0177: set_object $HRadio2 z_angle_to 270.0
$HRadio3 = Object.Create(#HRadio3, 228.8, -1261.0, 10.03)
01BC: put_object $HRadio3 at 228.8 -1261.0 20.03
0177: set_object $HRadio3 z_angle_to 270.0
$HRInd = Object.Create(#HRInd, 228.8, -1261.0, 10.03)
0177: set_object $HRInd z_angle_to 270.0
$HRTw1Rotation = 0.0
0400: create_coordinate 1@ 2@ 3@ from_object $HRadio offset 0.008 0.086 0.024
$HRTw1 = Object.Create(#HRTw1, 228.8, -1261.0, 10.03)
01BC: put_object $HRTw1 at 1@ 2@ 3@
0453: object $HRTw1 set_rotation 0.0 $HRTw1Rotation 270.0
$HRTw1aOffset = 0.015
0400: create_coordinate 1@ 2@ 3@ from_object $HRadio offset 0.025 $HRTw1aOffset 0.011
$HRTw1a = Object.Create(#HRTw1a, 228.8, -1261.0, 10.03)
01BC: put_object $HRTw1a at 1@ 2@ 3@
0177: set_object $HRTw1a z_angle_to 270.0
0400: create_coordinate 1@ 2@ 3@ from_object $HRadio offset 0.014 0.079 -0.003
$HRTw2 = Object.Create(#HRTw2, 228.8, -1261.0, 10.03)
01BC: put_object $HRTw2 at 1@ 2@ 3@
0177: set_object $HRTw2 z_angle_to 270.0
$HRTw3Rotation = 359.9
0400: create_coordinate 1@ 2@ 3@ from_object $HRadio offset 0.004 0.074 -0.027
$HRTw3 = Object.Create(#HRTw3, 228.8, -1261.0, 10.03)
01BC: put_object $HRTw3 at 1@ 2@ 3@
0453: object $HRTw3 set_rotation $HRTw3Rotation 0.0 270.0
$HTVBr01 = Object.Create(#HTVBr01, 228.3, -1260.8, 9.0)
0177: set_object $HTVBr01 z_angle_to 347.0
$HTVBr02 = Object.Create(#HTVBr02, 228.3, -1260.8, 9.0)
0177: set_object $HTVBr02 z_angle_to 347.0
0249: release_model #HRadio
0249: release_model #HRadio2
0249: release_model #HRadio3
0249: release_model #HRTw1
0249: release_model #HRTw1a
0249: release_model #HRTw2
0249: release_model #HRTw3
0249: release_model #HRInd
0249: release_model #HTVBr01
03CB: load_scene 229.0 -1265.0 19.0 // quickly load scene at this coords
Camera.SetPosition(226.1, -1277.3, 19.7, 0.0, 0.0, 0.0)
Camera.PointAt(229.0, -1267.0, 20.5, 2)
set_camera_near_clip 0.1 
wait 0 
fade 1 2000

:MENU_GOTO_MAIN
0460: set_camera_pointing_time 0.0 15000 
Camera.SetPosition(224.7, -1275.0, 19.5, 0.0, 0.0, 0.0)
Camera.PointAt(233.3, -1265.5, 21.5, 1)

:MENU_MAIN
wait 0
0A8D: 0@ = read_memory 0x869668 size 1 virtual_protect 1
if
0039:   0@ == 1
jf @MENU_MAIN
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if or
0038:   $MenuID == 1
0038:   $MenuID == 27
0038:   $MenuID == 28
jf @MENU_MAIN
if or
0038:   $MenuID == 1
0038:   $MenuID == 27
jf @MENU_EXIT
0460: set_camera_pointing_time 0.0 3500
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
if
8038:   NOT $MenuID == 27
jf @MENU_OPTIONS

:MENU_STARTGAME
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
8038:   NOT $MenuID == 29
jf @MENU_GOTO_MAIN
if
0038:   $MenuID == 8
jf @MENU_STARTGAME
0460: set_camera_pointing_time 0.0 2000
Camera.SetPosition(229.9, -1264.2, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1263.0, 19.7, 1)

:MENU_LOADGAME
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if and
8038:   NOT $MenuID == 8
8038:   NOT $MenuID == 10
jf @MENU_LOADGAME
0460: set_camera_pointing_time 0.0 3500
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
jump @MENU_STARTGAME

:MENU_OPTIONS
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
8038:   NOT $MenuID == 26
jf @MENU_OPTIONS_CONTROLLER
if
8038:   NOT $MenuID == 3
jf @MENU_OPTIONS_AUDIO  
if
8038:   NOT $MenuID == 4
jf @MENU_OPTIONS_DISPLAY
if
8038:   NOT $MenuID == 5
jf @MENU_OPTIONS_LANGUAGE
if
8038:   NOT $MenuID == 27
jf @MENU_OPTIONS
jump @MENU_GOTO_MAIN 

:MENU_OPTIONS_CONTROLLER
0460: set_camera_pointing_time 0.0 1000
Camera.SetPosition(228.7, -1265.3, 20.3, 0.0, 0.0, 0.0)
Camera.PointAt(226.4, -1265.3, 19.5, 1)
02D4: car $RCRaider turn_off_engine
0A8C: write_memory 0x6B70B0 size 2 value 20994 virtual_protect 1  // just enable vehicle sounds in interior 1

:MENU_OPTIONS_CONTROLLER_2
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
8038:   NOT $MenuID == 30
jf @MENU_OPTIONS_CONTROLLER_REDEFINE
if
0038:   $MenuID == 27
jf @MENU_OPTIONS_CONTROLLER_2
0460: set_camera_pointing_time 0.0 2000 
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
03A2: set_car_status $RCRaider to 5
0A8C: write_memory 0x6B70B0 size 2 value 20981 virtual_protect 1  // just disable vehicle sounds in interior 1
jump @MENU_OPTIONS

:MENU_OPTIONS_CONTROLLER_REDEFINE
0460: set_camera_pointing_time 0.0 2000
Camera.SetPosition(229.5, -1265.4, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(226.4, -1265.3, 20.4, 1)
04A2: heli $RCRaider fly_to 226.5 -1265.1 19.6 speed 1

:MENU_OPTIONS_CONTROLLER_REDEFINE_2
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
0038:   $MenuID == 30
jf @MENU_OPTIONS_CONTROLLER_REDEFINE_LEAVE

jump @MENU_OPTIONS_CONTROLLER_REDEFINE_2

:MENU_OPTIONS_CONTROLLER_REDEFINE_LEAVE
0460: set_camera_pointing_time 0.0 2000
Camera.SetPosition(228.7, -1265.3, 20.3, 0.0, 0.0, 0.0)
Camera.PointAt(226.4, -1265.3, 19.5, 1)
04A2: heli $RCRaider fly_to 226.5 -1265.1 19.4 speed 0
00AF: set_car $RCRaider driver_behaviour_to 23
jump @MENU_OPTIONS_CONTROLLER_2

:MENU_OPTIONS_AUDIO
040D: unload_wav 1
040D: unload_wav 2
03CF: load_wav '1' as 1  // Radio On
03CF: load_wav '2' as 2  // Radio Off
0460: set_camera_pointing_time 0.0 1000
Camera.SetPosition(228.91, -1261.3, 20.06, 0.0, 0.0, 0.0)
Camera.PointAt(228.8, -1261.0, 20.03, 1)
wait 800

:MENU_OPTIONS_AUDIO_2
wait 0
if
03D0:   wav 1 loaded
jf @MENU_OPTIONS_AUDIO_2
0A8C: write_memory 0x9839C4 size 1 value 0 virtual_protect 1  // Music Mode: 0 - Music off(OnMenu or mp3 is playing), 1 - Music On(InGame), 2 - CutscenePlaying, 4 - GameLoading
03D7: set_wav 1 location 228.8 -1261.0 20.03
03D1: play_wav 1
wait 200
0A8D: $RStation = read_memory 0x86965B size 1 virtual_protect 1
0A8C: write_memory 0x9839BC size 4 value $RStation virtual_protect 1
01BC: put_object $HRInd at 228.8 -1261.0 20.03

:MENU_OPTIONS_AUDIO_3
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
0038:   $MenuID == 3
jf @MENU_OPTIONS_AUDIO_LEAVE
gosub @MENU_OPTIONS_AUDIO_MUSICVOL
gosub @MENU_OPTIONS_AUDIO_RSTATION
jump @MENU_OPTIONS_AUDIO_3 

:MENU_OPTIONS_AUDIO_LEAVE
0453: object $HRTw3 set_rotation $HRTw3Rotation 0.0 270.0
wait 0
0009: $HRTw3Rotation += 15.0
if or
0020:   $HRTw3Rotation > 344.0
0022:   16.0 > $HRTw3Rotation
jf @MENU_OPTIONS_AUDIO_LEAVE
$HRTw3Rotation = 359.9
0453: object $HRTw3 set_rotation $HRTw3Rotation 0.0 270.0
03D7: set_wav 2 location 228.8 -1261.0 20.03
03D1: play_wav 2
0460: set_camera_pointing_time 0.0 2000 
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
0A8C: write_memory 0x9839C4 size 1 value 1 virtual_protect 1  // Music Mode: 0 - Music off(OnMenu or mp3 is playing), 1 - Music On(InGame), 2 - CutscenePlaying, 4 - GameLoading
01BC: put_object $HRInd at 228.8 -1261.0 10.03
jump @MENU_OPTIONS

:MENU_OPTIONS_AUDIO_MUSICVOL
0A8D: 0@ = read_memory 0x86965A size 1 virtual_protect 1  // Music Volume: 0-65
000A: 0@ += 5
0093: 0@ = integer 0@ to_float
0013: 0@ *= -3.0
000B: 0@ += 359.9
0065: 0@ -= $HRTw3Rotation
0017: 0@ /= 10.0
if or
0021:   0@ > 0.1
0023:   -0.1 > 0@
jf @MENU_OPTIONS_AUDIO_MUSICVOL_3
005F: $HRTw3Rotation += 0@
if or
0020:   $HRTw3Rotation > 358.7
0022:   1.0 > $HRTw3Rotation
jf @MENU_OPTIONS_AUDIO_MUSICVOL_2
$HRTw3Rotation = 359.9
 
:MENU_OPTIONS_AUDIO_MUSICVOL_2
0453: object $HRTw3 set_rotation $HRTw3Rotation 0.0 270.0

:MENU_OPTIONS_AUDIO_MUSICVOL_3
return

:MENU_OPTIONS_AUDIO_RSTATION
0A8D: 0@ = read_memory 0x86965B size 1 virtual_protect 1  // Current Radio Station: 0-9
0093: 0@ = integer 0@ to_float
0013: 0@ *= 0.0045
000B: 0@ += 0.015
0065: 0@ -= $HRTw1aOffset
0017: 0@ /= 10.0
if or
0021:   0@ > 0.0001
0023:   -0.0001 > 0@
jf @MENU_OPTIONS_AUDIO_RSTATION_3
005F: $HRTw1aOffset += 0@
if
0022:   0.015 > $HRTw1aOffset
jf @MENU_OPTIONS_AUDIO_RSTATION_2
$HRTw1aOffset = 0.015

:MENU_OPTIONS_AUDIO_RSTATION_2
0400: create_coordinate 1@ 2@ 3@ from_object $HRadio offset 0.025 $HRTw1aOffset 0.011
01BC: put_object $HRTw1a at 1@ 2@ 3@
0086: $HRTw1Rotation = $HRTw1aOffset
000D: $HRTw1Rotation -= 0.015
0011: $HRTw1Rotation *= 4000.0 // floating-point values
0453: object $HRTw1 set_rotation 0.0 $HRTw1Rotation 270.0

:MENU_OPTIONS_AUDIO_RSTATION_3
return

:MENU_OPTIONS_DISPLAY
0460: set_camera_pointing_time 0.0 1000
Camera.SetPosition(232.1, -1264.1, 20.1, 0.0, 0.0, 0.0)
Camera.PointAt(233.2, -1263.1, 20.0, 1)
play_music -91

:MENU_OPTIONS_DISPLAY_2
0209: 0@ = random_int_in_ranges 50 75
wait 0@
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
0038:   $MenuID == 4
jf @MENU_OPTIONS_DISPLAY_LEAVE
01BC: put_object $HTVBr01 at 228.3385468 -1260.84082 19.0687294
01BC: put_object $HTVBr02 at 228.3385468 -1260.84082 9.0687294

:MENU_OPTIONS_DISPLAY_3
0209: 0@ = random_int_in_ranges 50 75
wait 0@
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
0038:   $MenuID == 4
jf @MENU_OPTIONS_DISPLAY_LEAVE
01BC: put_object $HTVBr01 at 228.3385468 -1260.84082 9.0687294
01BC: put_object $HTVBr02 at 228.3385468 -1260.84082 19.0687294
jump @MENU_OPTIONS_DISPLAY_2

:MENU_OPTIONS_DISPLAY_LEAVE
0A8C: write_memory 0x9839C4 size 1 value 1 virtual_protect 1  // Music Mode: 0 - Music off(OnMenu or mp3 is playing), 1 - Music On(InGame), 2 - CutscenePlaying, 4 - GameLoading
01BC: put_object $HTVBr01 at 228.3385468 -1260.84082 9.0687294
01BC: put_object $HTVBr02 at 228.3385468 -1260.84082 9.0687294
0460: set_camera_pointing_time 0.0 2000 
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
jump @MENU_OPTIONS

:MENU_OPTIONS_LANGUAGE
0460: set_camera_pointing_time 0.0 1000
Camera.SetPosition(229.8, -1267.2, 20.4, 0.0, 0.0, 0.0)
Camera.PointAt(228.9, -1267.7, 19.6, 1)

:MENU_OPTIONS_LANGUAGE_2
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
8038:   NOT $MenuID == 5
jf @MENU_OPTIONS_LANGUAGE_2
0460: set_camera_pointing_time 0.0 2000 
Camera.SetPosition(229.0, -1267.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(227.5, -1262.6, 19.5, 1)
jump @MENU_OPTIONS

:MENU_EXIT
0460: set_camera_pointing_time 0.0 3500
Camera.SetPosition(229.5, -1269.0, 20.5, 0.0, 0.0, 0.0)
Camera.PointAt(226.1, -1277.3, 19.4, 1)

:MENU_EXIT_2
wait 0
0A8D: $MenuID = read_memory 0x869728 size 1 virtual_protect 1
if
8038:   NOT $MenuID == 28
jf @MENU_EXIT_2
jump @MENU_GOTO_MAIN